/*-------------------------------------------------------------------------
  Author (C) 2008, Charles Wang <charlesw123456@gmail.com>

  This program is free software; you can redistribute it and/or modify it 
  under the terms of the GNU General Public License as published by the 
  Free Software Foundation; either version 2, or (at your option) any 
  later version.

  This program is distributed in the hope that it will be useful, but 
  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
  for more details.

  You should have received a copy of the GNU General Public License along 
  with this program; if not, write to the Free Software Foundation, Inc., 
  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

  As an exception, it is allowed to write an extension of Coco/R that is
  used as a plugin in non-free software.

  If not otherwise stated, any source code generated by Coco/R (other than 
  Coco/R itself) does not fall under the GNU General Public License.
-------------------------------------------------------------------------*/
#include  "c/Scanner.h"
#include  "c/ScanInput.h"

int
main(int argc, char * argv[])
{
    FILE * infp;
    CcsScanner_t scanner;
    CcsToken_t * t, * la;

    if (argc != 2) {
	fprintf(stderr, "argc != 2\n");
	return -1;
    }
    if (!(infp = fopen(argv[1], "r"))) {
	fprintf(stderr, "fopen(%s, \"r\") failed\n", argv[1]);
	return -1;
    }
    CcsScanner(&scanner, NULL, infp);
    t = NULL; la = CcsScanner_GetDummy(&scanner);
    for (;;) {
	if (t) CcsScanner_TokenDecRef(&scanner, t);
	t = la;
	if (t) {
	    printf("CcsToken(%s:%d,%d): kind = %d pos = %d: [%s]\n",
		   t->loc.fname, t->loc.line, t->loc.col,
		   t->kind, t->pos, t->val);
	}
	la = CcsScanner_Scan(&scanner);
	if (la->kind == scanner.cur->info->eofSym) break;
    }
    if (t) CcsScanner_TokenDecRef(&scanner, t);
    if (la) CcsScanner_TokenDecRef(&scanner, la);
    CcsScanner_Destruct(&scanner);
    fclose(infp);
    return 0;
}
